Right multiply matrix
import sympy
from sympy.vector import AxisOrienter, CoordSys3D
x,y,theta = sympy.symbols("x y theta")
N = CoordSys3D("N")
M = AxisOrienter(theta, N.k).rotation_matrix(N)
M
M.inv()
v = sympy.Matrix([x,y,0]).T * M.subs(theta, sympy.pi/2)
v
import py3d
py3d.Transform.from_euler("xyz", [0.4, -0.2, 0])
Welcome to py3d world, please visit https://tumiz.github.io/scenario/ for more information
Transform([[ 0.98006658, 0. , 0.19866933, 0. ],
[-0.07736548, 0.92106099, 0.3816559 , 0. ],
[-0.18298657, -0.38941834, 0.9027011 , 0. ],
[ 0. , 0. , 0. , 1. ]])
import py3d
py3d.Transform.from_euler("XYZ", [0.4, -0.2, 0])
Transform([[ 0.98006658, -0.07736548, 0.18298657, 0. ],
[ 0. , 0.92106099, 0.38941834, 0. ],
[-0.19866933, -0.3816559 , 0.9027011 , 0. ],
[ 0. , 0. , 0. , 1. ]])
import py3d
py3d.Transform.from_rpy([1.3,1.0,0]) @ py3d.Transform.from_rpy([0.9,.0,0])
Transform([[ 0.54030231, 0.68032627, 0.49520661, 0. ],
[ 0. , -0.58850112, 0.8084964 , 0. ],
[ 0.84147098, -0.43683247, -0.31796851, 0. ],
[ 0. , 0. , 0. , 1. ]])
Apply a intrinsic rotation to a point
import py3d
v=py3d.Viewer()
p=py3d.Vector3([1,3,4])
v.label("P",p.tolist())
v.render(p.as_point(py3d.Color(g=1)),py3d.Utils.Grid())
t = py3d.Transform.from_euler("XYZ", [0,0,1])
p1 = p @ t
a = py3d.Utils.Axis()
a.vertex @= t
v.label("P1",p1.tolist())
v.render(p1.as_point(py3d.Color(r=1)), a)
v.show()
import py3d
v = py3d.Viewer()
e_car = py3d.Utils.Car()
e_car.color = py3d.Color(g=1)
e_car.vertex @= py3d.Transform.from_euler("xyz", [0.4, -0.2, 0])
v.label("Extrincs", [4,1,3], color="green")
i_car = py3d.Utils.Car()
i_car.color = py3d.Color(r=1)
i_car.vertex @= py3d.Transform.from_euler("XYZ", [0.4, -0.2, 0])
v.label("Intrincs", [4,-1,3], color="red")
v.render(e_car, i_car, py3d.Utils.Grid())
v.show()
In py3d, rpy represents roll, pitch and yaw, it is kind of intrinsic rotation
from PIL import Image
import numpy
import py3d
img = numpy.array(Image.open("py3d/doc/20220917214012.jpg"))
hw = img.shape[0]//2
hh = img.shape[1]//2
point = py3d.Vector3.grid(range(-hw, hw), range(-hh, hh))[::3, ::3]*0.01
point = point.as_point()
point.color = py3d.Vector3(img/255).H[::3, ::3]
point.vertex @= py3d.Transform.from_rpy([0, 0, -py3d.pi/2])
point.render()